home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / kowin / archive / kob / kob001s.lzh / kob.has < prev    next >
Text File  |  1996-11-12  |  6KB  |  334 lines

  1.  
  2. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  3. *
  4. *    kob.has  ……   こ-BASICのイベント処理
  5. *
  6. *━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
  7.  
  8.     .xref    _kob_exec
  9.     .xref    _kobas_exit
  10.     .xref    graphic_move
  11.  
  12.  
  13.     .include    kob.h
  14.     .include    variable.h
  15.     .include    doscall.mac
  16.     .include    iocscall.mac
  17.     .include    fefunc.h
  18.  
  19.  
  20.     .text
  21.     .even
  22.  
  23.     .xdef    _kob_flag
  24. _kob_flag:    .dc.w    0
  25. _kob_event:    .dc.w    0
  26.  
  27.     .xdef    _EventExec
  28. _EventExec:
  29.     *    KH    ' 謎のイベント ',8(sp)
  30.     movem.l    d3-d7/a3-a6,-(sp)
  31.     movea.l    a6保存(pc),a6
  32.  
  33.     movem.l    4+4*9(sp),d3/a3            * WID/info
  34.     move.l    info_option(a3),d4        * option
  35.     move.l    d3,_WinID
  36.  
  37.  
  38. kob_event_start:
  39.     cmpi.w    #15,d4            * interval event
  40.     bne    1f
  41.         move.l    _ITIME(pc),d2
  42.         bmi    event_def        * interval event off
  43.         IOCS    _ONTIME
  44.         move.l    d0,d1
  45.         sub.l    inter_time(pc),d0
  46.         cmp.l    d2,d0
  47.         bcs    event_def        * 時間来てない
  48.         move.l    d1,inter_time
  49.         bra    @f
  50. 1:
  51.     cmpi.w    #1,d4            * redraw event
  52.     bne    @f
  53.         bsr    graphic_repalet
  54. @@:
  55.  
  56.     move.w    d4,d0            * option(イベント番号)
  57.     lsl.w    #2,d0
  58.     lea.l    system関数登録,a0
  59.     move.l    (a0,d0.w),d5        * プログラム開始アドレス (or NULL)
  60.     beq    event_def        * イベント未登録
  61.  
  62.  
  63. *    bsr    global_info_copy    * info を global変数参照領域にコピー
  64.  
  65. *    lea.l    _kob_flag(pc),a0
  66. *    move.w    #1,(a0)+        * 動作中
  67. *    move.w    #15,(a0)+        * interval event で継続実行
  68. *    KOP    'kob_flag を 1 に!'
  69.  
  70.     move.l    xbFLAG,d7
  71.     bset    #7,d7        * auto
  72.     move.l    d7,xbFLAG
  73.  
  74. *    moveq.l    #TRUE,d0
  75. *    move.l    d0,returnNUM
  76.     clr.l    returnNUM
  77.  
  78.  
  79.     move.l    変数area,-(sp)
  80.     movem.l    d3/d4,-(sp)
  81.  
  82.         move.l    d3,-(sp)        * ウィンドウポインタ
  83.         bsr    _WindowGetClientData
  84.         move.l    d0,(sp)            * ウィンドウ番号
  85.         subq.l    #4,sp
  86.         move.w    #$0001,-(sp)    * int (関係ないけど一応)
  87.         move.w    #1,-(sp)    * 引き数 1個
  88.     move.l    d5,-(sp)        * プログラム開始アドレス
  89.     move.l    a3,-(sp)        * auto システム変数
  90.  
  91.     *    KH    'プログラム開始アドレス',d5
  92.     bsr    _kob_exec        * イベント関数実行
  93.     movea.l    (sp)+,a3
  94.     lea.l    4+2+10(sp),sp
  95.  
  96.     movem.l    (sp)+,d3/d4
  97.     move.l    (sp)+,変数area
  98.  
  99.     move.l    returnNUM,d0
  100.     bne    event_end     * return(0) で、こBのイベントデフォルト処理行う
  101.  
  102.  
  103. event_def:    * デフォルトのイベント処理
  104.     move.l    #FALSE,d0
  105.     bsr    _event_default        * default処理
  106. event_end:
  107.     movem.l    (sp)+,d3-d7/a3-a6
  108.     rts
  109.  
  110.  
  111.  
  112. inter_time:
  113.     .dc.l    0
  114.  
  115.  
  116.  
  117.  
  118. **    **    **    **    **    **    **    **    **    **
  119. _event_default:
  120.     move.w    d4,d1            * option
  121.     add.w    d1,d1
  122.     move.w    table(pc,d1.w),d1
  123.     jmp    table(pc,d1.w)
  124. table:
  125.     .dc.w    EventOpen-table        * 初期化        0
  126.     .dc.w    EventRedraw-table    * 描き直し
  127.     .dc.w    EventClose-table     * クローズ
  128.     .dc.w    EventPop-table        * ポップ
  129.     .dc.w    EventPush-table        * プッシュ
  130.     .dc.w    EventMove-table        * 移動
  131.     .dc.w    EventResize-table    * 変形
  132.     .dc.w    EventIconify-table    * アイコン化
  133.     .dc.w    EventZoom-table        * 拡大            8
  134.     .dc.w    EventScroll-table    * スクロール
  135.     .dc.w    EventMouseSwitch-table    * マウスのスイッチ
  136.     .dc.w    EventMouseMove-table    * マウスの移動
  137.     .dc.w    EventMouseEnter-table    * マウスの移動
  138.     .dc.w    EventMouseOut-table    * マウスの移動
  139.     .dc.w    EventKey-table        * キー入力
  140.     .dc.w    EventInterval-table    * タイマイベント
  141.     .dc.w    EventNon-table        * イベントなし        16
  142.     .dc.w    EventUser-table        * ユーザイベント
  143.     .dc.w    EventGraphic-table    * グラフィックモード
  144.  
  145.  
  146.  
  147.  
  148. EventOpen:
  149.     lea.l    _bwp,a0
  150.     move.l    _WinNumber,d0
  151.     *    KH    'Event Open Number = ',d0
  152.     lsl.w    #2,d0
  153.     move.l    d3,(a0,d0.w)        * WindowID 保存
  154.  
  155.     clr.l    -(sp)            * NULL
  156.     move.l    _WinNumber,-(sp)
  157.     move.l    d3,-(sp)
  158.     bsr    _WindowSetClientData
  159.     bsr    _WindowRedraw
  160.     lea.l    12(sp),sp
  161.  
  162.     move.l    #TRUE,d0
  163.     rts
  164.  
  165.  
  166. EventClose:
  167.     bsr    _kobas_exit
  168.     move.l    #TRUE,d0
  169.     rts
  170.  
  171. EventMove:
  172.     movem.l    d3/a3,-(sp)
  173.     bsr    graphic_move
  174.     addq.l    #8,sp
  175.     move.l    info_y(a3),-(sp)
  176.     move.l    info_x(a3),-(sp)
  177.     move.l    d3,-(sp)
  178.     bsr    _WindowMove
  179.     lea.l    12(sp),sp
  180. *    move.l    #FALSE,d0
  181.     rts
  182.  
  183. EventResize:
  184.     movem.l    info_x(a3),d0/d1/a0/a1
  185.     movem.l    d0/d1/a0/a1,-(sp)
  186.     move.l    d3,-(sp)
  187.     bsr    _WindowResize
  188.     lea.l    20(sp),sp
  189. *    move.l    #FALSE,d0
  190.     rts
  191.  
  192. EventIconify:
  193.     pea.l    16.w
  194.     pea.l    9.w
  195.     pea.l    icon_title(pc)
  196.     move.l    d3,-(sp)
  197.     bsr    _IconEnt
  198.     lea.l    16(sp),sp
  199. *    move.l    #FALSE,d0
  200.     rts
  201.  
  202. icon_title:
  203.     .dc.b    'icon',0
  204.     .even
  205.  
  206. EventRedraw:
  207. EventMouseSwitch:
  208. EventPop:
  209. EventPush:
  210. EventZoom:
  211. EventScroll:
  212. EventMouseMove:
  213. EventMouseEnter:
  214. EventMouseOut:
  215. EventKey:
  216. EventNon:
  217. EventUser:
  218. EventGraphic:
  219. EventInterval:
  220.     rts
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227.  
  228.  
  229. **    **    **    **    **    **    **    **    **    **
  230. .if 0
  231. global_info_copy:
  232.     lea.l    global_info(pc),a0
  233.     movea.l    a3,a1
  234.     moveq    #info_size/4-1,d0
  235. @@:
  236.     move.l    (a1)+,(a0)+
  237.     dbra    d0,@b
  238.     rts
  239.  
  240.     .xdef    global_info
  241. global_info:
  242.     .ds.b    info_size
  243. .endif
  244.  
  245.  
  246. **    **    **    **    **    **    **    **    **    **
  247.     .xdef    ko_debug
  248. ko_debug:
  249.     movem.l    d0-d2/a0-a2,-(sp)
  250.     move.l    4+4*6(sp),-(sp)
  251.     bra    1f
  252.  
  253.     .xdef    ko_hex_print
  254. ko_hex_print:
  255.     movem.l    d0-d2/a0-a2,-(sp)
  256.     move.l    4+4*6(sp),d0
  257.     lea.l    dbuf(pc),a0
  258.     move.l    a0,-(sp)
  259.     move.b    #'$',(a0)+
  260.     FPACK    __HTOS
  261.     bra    @f
  262.  
  263.     .xdef    ko_dec_print
  264. ko_dec_print:
  265.     movem.l    d0-d2/a0-a2,-(sp)
  266.     move.l    4+4*6(sp),d0
  267.     lea.l    dbuf(pc),a0
  268.     move.l    a0,-(sp)
  269.     FPACK    __LTOS
  270. @@:
  271.     move.b    #13,(a0)+
  272.     move.b    #10,(a0)+
  273.     clr.b    (a0)
  274. 1:
  275.     bsr    _ConsoleOpen
  276.     bsr    _ConsolePrint
  277.     addq.l    #4,sp
  278.     movem.l    (sp)+,d0-d2/a0-a2
  279.     rts
  280.  
  281. dbuf:
  282.     .ds.b    16
  283.  
  284.  
  285.  
  286.  
  287.  
  288.  
  289.  
  290.  
  291. **    **    **    **    **    **    **    **    **    **
  292.     .text
  293.     .even
  294.  
  295. _WindowHeapSize::
  296. *        .dc.l 1930
  297.         .dc.l    2048
  298. _WINX::        .dc.l    10
  299. _WINY::        .dc.l    10
  300. _WINH::        .dc.l    0
  301. _WINV::        .dc.l    0
  302. _ITIME::    .dc.l    100
  303.  
  304. _bwp::        .ds.l    WINMAX
  305. _WinNumber::    .dc.l    0
  306. _WinID::    .dc.l    0
  307.  
  308.     .xdef    _WindowMain
  309. _WindowMain:
  310.     movem.l    4(sp),d0/d1
  311.     pea.l    _WINV(pc)
  312.     pea.l    _WINH(pc)
  313.     pea.l    _WINY(pc)
  314.     pea.l    _WINX(pc)
  315.     movem.l    d0/d1,-(sp)
  316.     bsr    _AnalyzeArgs
  317.     move.l    d0,(sp)
  318.     bsr    _kobas_init
  319.     lea    4*6(sp),sp
  320.  
  321.     tst.l    d0
  322.     beq    2f
  323.         bsr    _kobas_exit
  324.     bra    1f
  325. 2:
  326.     bsr    _kobas_init_exec
  327. 1:
  328.     clr.w    xb動作mode            * H8/4/20 夜中(エラーが出たらハング!)
  329.     rts
  330.  
  331.  
  332.     .end
  333.  
  334.